#include <concepts>
#include <type_traits>
template <typename T>
concept Addable = std::is_integral_v<T>;
// 1. 模板形参列表后直接用
template <Addable T>
T add1(T a, T b) { return a + b; }

// 2. requires 子句
template <typename T>
    requires Addable<T>
T add2(T a, T b)
{
    return a + b;
}

// 3. 简写函数模板（自动推导返回类型）
auto add3(Addable auto a, Addable auto b) { return a + b; }

// 4. 偏特化 / 重载：concept 作为“标签”
template <class T>
void foo(T) { std::cout << "generic\n"; }
template <Addable T>
void foo(T) { std::cout << "Addable\n"; }